제가 MPU6050 자이로 센서에 대해 사이트에 올려주신 코딩을 사용해서 XYZ값이 시리얼 모니터에 출력이 되는 것 까지는 확인했습니다.
여기서 LED를 연결하여 X축의 값이 일정수준을 넘어가게되면 LED에 불이 켜지도록 하고 싶은데 'if'문을 사용 하는것이 맞나요? 또 그 활용 방법좀 알려주실수 있을까요??
아두이노 초보자입니다 회로도도 알려주시면 감사하겠습니다ㅜ.ㅡ 아래는 제가 사용한 라이브러리와 mpu6050 코딩입니다
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
#include "I2Cdev.h"
#include "MPU6050_6Axis_MotionApps20.h"
#include "Wire.h"
MPU6050 mpu;
#define INTERRUPT_PIN 2 // use pin 2 on Arduino Uno & most boards
// 센서 상태들을 저장할 변수들
bool dmpReady = false;
uint8_t mpuIntStatus;
uint8_t devStatus;
uint16_t packetSize;
uint16_t fifoCount;
uint8_t fifoBuffer[64];
Quaternion q; // [w, x, y, z] quaternion container
VectorFloat gravity; // [x, y, z] gravity vector
float ypr[3]; // [yaw, pitch, roll] yaw/pitch/roll container and gravity vector
volatile bool mpuInterrupt = false;
void dmpDataReady() {
mpuInterrupt = true;
}
void setup() {
//I2C 셋팅 및 시작
Wire.begin();
Wire.setClock(400000); // 400kHz I2C clock. Comment this line if having compilation difficulties
Serial.begin(115200);
Serial.println(F("Initializing I2C devices..."));
//MPU 6050 센서 초기화
mpu.initialize();
//인터럽트핀(2) 입력으로 설정
pinMode(INTERRUPT_PIN, INPUT);
//연결 확인
Serial.println(F("Testing device connections..."));
Serial.println(mpu.testConnection() ? F("MPU6050 connection successful") : F("MPU6050 connection failed"));
Serial.println(F("Initializing DMP..."));
devStatus = mpu.dmpInitialize();
mpu.setXGyroOffset(220);
mpu.setYGyroOffset(76);
mpu.setZGyroOffset(-85);
mpu.setZAccelOffset(1788);
if (devStatus == 0) {
//DMP 활성화
Serial.println(F("Enabling DMP..."));
mpu.setDMPEnabled(true);
Serial.println(F("Enabling interrupt detection (Arduino external interrupt 0)..."));
attachInterrupt(digitalPinToInterrupt(INTERRUPT_PIN), dmpDataReady, RISING);
mpuIntStatus = mpu.getIntStatus();
Serial.println(F("DMP ready! Waiting for first interrupt..."));
dmpReady = true;
packetSize = mpu.dmpGetFIFOPacketSize();
} else {
//에러 났을 때
// ERROR!
// 1 = 초기화 에러
// 2 = DMP 업데이트 에러
Serial.print(F("DMP Initialization failed (code "));
Serial.print(devStatus);
Serial.println(F(")"));
}
}
void loop() {
if (!dmpReady) return;
while (!mpuInterrupt && fifoCount < packetSize);
mpuInterrupt = false;
mpuIntStatus = mpu.getIntStatus();
fifoCount = mpu.getFIFOCount();
if ((mpuIntStatus & 0x10) || fifoCount == 1024) {
mpu.resetFIFO();
Serial.println(F("FIFO overflow!"));
} else if (mpuIntStatus & 0x02) {
while (fifoCount < packetSize) fifoCount = mpu.getFIFOCount();
// 데이터 받아 오기
mpu.getFIFOBytes(fifoBuffer, packetSize);
fifoCount -= packetSize;
//값 얻어오기
mpu.dmpGetQuaternion(&q, fifoBuffer);
mpu.dmpGetGravity(&gravity, &q);
mpu.dmpGetYawPitchRoll(ypr, &q, &gravity);
//출력
Serial.print("ypr\t");
Serial.print(ypr[0] * 180/M_PI); //Yaw
Serial.print("\t");
Serial.print(ypr[1] * 180/M_PI); //Pitch
Serial.print("\t");
Serial.println(ypr[2] * 180/M_PI); //Roll
}
}
------------------------------------------------------------------------------------------------------------------------------------------------------
댓글목록
등록된 댓글이 없습니다.